package cn.taskservice.common.utils.page;

import cn.taskservice.common.enums.ResultCode;
import cn.taskservice.common.utils.result.ResultUtil;
import cn.taskservice.common.vo.Result;
import com.baomidou.mybatisplus.core.metadata.IPage;

import java.util.Collections;
import java.util.List;
import java.util.function.Supplier;

public class PageUtil {
    /**
     * 构建分页响应（MyBatis-Plus 原生支持）
     */
    public static <T> Result<PageResult<T>> of(IPage<T> page) {
        return ResultUtil.success(
                new PageResult<>(page.getTotal(), page.getCurrent(), page.getSize(), page.getRecords())
        );
    }

    /**
     * 构建分页响应（支持 count + data 分离）
     */
    public static <T> Result<PageResult<T>> smartPage(long pageNum, long pageSize,
                                                      Supplier<Long> countSupplier,
                                                      Supplier<List<T>> dataSupplier) {
        long total = countSupplier.get();
        if (total == 0) {
            return ResultUtil.success(
                    new PageResult<>(0, pageNum, pageSize, Collections.emptyList())
            );
        }
        List<T> records = dataSupplier.get();
        return ResultUtil.success(
                new PageResult<>(total, pageNum, pageSize, records)
        );
    }
}
